package com.tangyee.home_diet;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;
import com.github.mikephil.charting.formatter.PercentFormatter;
import com.tangyee.R;

import java.util.ArrayList;

/**
* @author: liuyaowen
* @date: 19-2-2 上午9:49
*/

public class DietAnalysisFragment extends Fragment {
    private PieChart pieChart;
    private PieData pieData;
    private String[] x = new String[] { "碳水化合物", "蛋白质", "脂肪"};
    // 凑成100 % 100
    private ArrayList<Float> y= new ArrayList<>();
    private TextView foodnum;
    private EditText foodelement;
    private EditText unit;
    private Button add;
    private Button reset;
    private Button analysis;
    public static Fragment newInstance() {
        DietAnalysisFragment fragment = new DietAnalysisFragment();
        return fragment;
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View view = inflater.inflate(R.layout.layout_home_diet_analysis_fragment,null);
        pieChart = view.findViewById(R.id.piechart);
        pieChart.setNoDataText("您还未填入食材元素以及数量");
        setLisenerOnView(view);
        return view;
    }
    public void setLisenerOnView(final View view1){
        foodelement=view1.findViewById(R.id.foodelement);
        foodnum=view1.findViewById(R.id.foodNum);
        add=view1.findViewById(R.id.add);
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(foodelement.getText().toString().equals("")&&unit.getText().toString().equals("")){
                    Toast.makeText(DietAnalysisFragment.this.getContext(), "食材元素和数量还没填呢！", Toast.LENGTH_SHORT).show();
                } else if(foodelement.getText().toString().equals("")){
                    Toast.makeText(DietAnalysisFragment.this.getContext(), "食材元素还没填呢！", Toast.LENGTH_SHORT).show();
                }else if(unit.getText().toString().equals("")){
                    Toast.makeText(DietAnalysisFragment.this.getContext(), "数量还没填呢！", Toast.LENGTH_SHORT).show();
                } else{
                    //这里得判断是不是第一次输入食材，不是的话要把所有输入的结果都展示出来
                    if (foodnum.getText().toString().equals("")) {
                        foodnum.setText(foodelement.getText().toString()+"#"+unit.getText().toString() + "克");
                        foodelement.setText("");
                        unit.setText("");
                    } else {
                        foodnum.setText(foodnum.getText().toString() + "," + foodelement.getText().toString() + "#" + unit.getText().toString() + "克");
                        foodelement.setText("");
                        unit.setText("");
                    }
                }
                //隐藏键盘
                InputMethodManager imm = ( InputMethodManager ) view.getContext( ).getSystemService( Context.INPUT_METHOD_SERVICE );
                if ( imm.isActive( ) ) {
                    imm.hideSoftInputFromWindow( view.getApplicationWindowToken( ) , 0 );
                }
            }
        });
        reset=view1.findViewById(R.id.reset);
        reset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                foodelement.setText("");
                unit.setText("");
                foodnum.setText("");
                //隐藏键盘
                InputMethodManager imm = ( InputMethodManager ) view.getContext( ).getSystemService( Context.INPUT_METHOD_SERVICE );
                if ( imm.isActive( ) ) {
                    imm.hideSoftInputFromWindow( view.getApplicationWindowToken( ) , 0 );
                }
            }
        });
        analysis=view1.findViewById(R.id.analysis);
        analysis.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(foodnum.getText().toString().equals("")){
                    Toast.makeText(DietAnalysisFragment.this.getContext(), "食材组成信息不完整！", Toast.LENGTH_SHORT).show();
                }else {
                    //这里获取要分析的数据
                    y.add(20f);//碳水化合物
                    y.add(30f);//蛋白质
                    y.add(50f);//脂肪
                    showPieChart(view1);
                    y.clear();
                }
                //隐藏键盘
                InputMethodManager imm = ( InputMethodManager ) view.getContext( ).getSystemService( Context.INPUT_METHOD_SERVICE );
                if ( imm.isActive( ) ) {
                    imm.hideSoftInputFromWindow( view.getApplicationWindowToken( ) , 0 );
                }
            }
        });
        unit=view1.findViewById(R.id.unit);
    }
    @Override
    public void onViewCreated(View view,Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }
    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }
    //显示饼图
    public void  showPieChart(View view) {
        //pieChart = view.findViewById(R.id.piechart);
        pieData = setData(y.size());
        setPieChart(pieChart,pieData);
    }
    //设置饼图的相关信息
    private void setPieChart(PieChart pieChart, PieData pieData) {
        //设置PieChart内部圆的半径(这里设置28.0f)
        pieChart.setHoleRadius(28f);
        //设置PieChart内部透明圆的半径(这里设置31.0f)
        pieChart.setTransparentCircleRadius(31f);
        //设置PieChart内部透明圆与内部圆间距(31f-28f)填充颜色
        //pieChart.setTransparentCircleColor(Color.BLACK);
        //设置PieChart内部透明圆与内部圆间距(31f-28f)透明度[0~255]数值越小越透明
        //pieChart.setTransparentCircleAlpha(10);
        Description description = new Description();
        description.setText("总热量：158.00千卡");
        description.setTextSize(15f);
        description.setPosition(400, 50);
        description.setTextColor(Color.parseColor("#ff9933"));
        pieChart.setDescription(description);
        //是否绘制PieChart内部中心文本
        pieChart.setDrawHoleEnabled(true);
        //设置PieChart内部圆文字的内容
        pieChart.setCenterText("食物主要成分分析");
        //设置pieChart图表上下左右的偏移，类似于外边距
        pieChart.setExtraOffsets(15, 0, 0, 0);
        //设置pieChart是否只显示饼图上百分比不显示文字(false只显示百分比)
        pieChart.setDrawEntryLabels(true);
        //设置pieChart图表文本字体大小
        pieChart.setEntryLabelTextSize(20f);
        //设置pieChart图表起始角度
        pieChart.setRotationAngle(-90f);
        //显示成百分比
        pieChart.setUsePercentValues(true);
        //设置可以手动旋转
        pieChart.setRotationEnabled(false);
        pieChart.setData(pieData);
        //pieChart.needsHighlight(50);
        //设置动画时间
        pieChart.animateXY(1200, 1200);
        Legend legend = pieChart.getLegend();
        //是否启用图列
        legend.setEnabled(true);
        //图例相对于图表纵向的位置
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        //图例相对于图表横向的位置
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        //图例显示的方向
        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        //设置图例的形状
        legend.setForm(Legend.LegendForm.SQUARE);
        //设置图例的大小//设置图例的大小
        legend.setFormSize(10);
        //设置每个图例实体中标签和形状之间的间距
        legend.setFormToTextSpace(10f);
//        legend.setDrawInside(false);
        //设置图列换行(注意使用影响性能,仅适用legend位于图表下面)
        //legend.setWordWrapEnabled(false);
//        //设置图例实体之间延X轴的间距（setOrientation = HORIZONTAL有效）
//        //legend.setXEntrySpace(10f);
        //设置图例实体之间延Y轴的间距（setOrientation = VERTICAL 有效）
        legend.setYEntrySpace(5f);
//        //设置比例块Y轴偏移量
        legend.setYOffset(20f);
//        //设置图例标签文本的大小
        legend.setTextSize(10f);
//        //设置图例标签文本的颜色
        legend.setTextColor(Color.parseColor("#ff9933"));
//        //pieChart.invalidate();
    }
    //添加数据到饼图中
    private PieData setData(int count) {
        // 准备x"轴"数据：在i的位置，显示x[i]字符串
        ArrayList<String> xVals = new ArrayList<>();
        // 真实的饼状图百分比分区。
        // Entry包含两个重要数据内容：position和该position的数值。
        ArrayList<PieEntry> yVals = new ArrayList<>();
        for (int xi = 0; xi < count; xi++) {
            //xVals.add(xi, x[xi]);
            // y[i]代表在x轴的i位置真实的百分比占
            yVals.add(new PieEntry(y.get(xi), x[xi]));
        }
        PieDataSet yDataSet = new PieDataSet(yVals, "百分比占");
        //设置饼状之间的间隙
        yDataSet.setSliceSpace(5);
        // 每个百分比占区块绘制的不同颜色
        ArrayList<Integer> colors = new ArrayList<>();
        //colors.add(Color.rgb(231, 76, 60));
        colors.add(Color.rgb(52,152,219));
        colors.add(Color.rgb(46,204,113));
        colors.add(Color.rgb(241,196,15));
        yDataSet.setColors(colors);
        // 将x轴和y轴设置给PieData作为数据源
        pieData = new PieData(yDataSet);
        //设置是否显示数据实体
        pieData.setDrawValues(true);
        //设置所有DataSet内数据实体（百分比）的文本颜色
        pieData.setValueTextColor(Color.BLUE);
        //设置所有DataSet内数据实体（百分比）的文本字体大小
        pieData.setValueTextSize(15f);
        //设置所有DataSet内数据实体（百分比）的文本字体格式
        pieData.setValueFormatter(new PercentFormatter());
        // 设置成PercentFormatter将追加%号
        pieData.setValueFormatter(new PercentFormatter());
        // 文字的颜色
        pieData.setValueTextColor(Color.BLACK);
        //pieChart.invalidate();
        return pieData;
    }
}
